package com.zjpavt.client.page.abstractpage;

import com.zjpavt.client.page.intefacepage.ParentPage;
import com.zjpavt.client.page.intefacepage.SonPage;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.List;

/**
 * 抽象的父页面
 * 可以实现除了页面指定内容的其它逻辑
 * @author zyc
 */
@Slf4j
public abstract class AbstractParentPage extends AbstractEditablePage implements ParentPage {

    /*  *//**
       * 是否在访问内嵌页面
       *//*
  protected boolean isVisitInnerPage = false;*/

    /**
     * 内嵌页面列表
     */
    protected List<SonPage> sonPageList = new ArrayList<>();

    /**
     * 内嵌页面列表
     */
//    protected List<SonPage> sonPageList = new ArrayList<>();

    /**
     * 当处于浏览子页面时 当前活跃的页面编码
     */
    protected SonPage currentActivePage;

    public AbstractParentPage(int pageNum, long mRefreshPeriod) {
        super(pageNum, mRefreshPeriod);
    }


    /********************************************
     * 以下四个方法方法需要呗覆盖不可调用 因为每个页面都不一样
     * 通用的只有执行逻辑
     */

    @Override
    public abstract void setDefaultVal();

    @Override
    public abstract void initEditUnits();

    @Override
    public abstract void saveVal();

    @Override
    public abstract void refreshPage();


    /*****************************************
     * 以下方法为父页面的执行逻辑 可以复用
     */

    @Override
    public void enterSonPage() {
        if (!isInEditMode()) {
            log.error("not in edit mode but want to enter son page!");
        }
        SonPage sonpage = sonPageList.get(getCurrBlinkIndex());
        setCurrentActivePage(sonpage);
        exitEditMode();
        sonpage.enterSonPage();
    }

    @Override
    public void exitSonPage() {
        setCurrentActivePage(null);
        refreshPage();
    }

    @Override
    public SonPage getCurrentActivePage() {
        return this.currentActivePage;
    }

    @Override
    public void setCurrentActivePage(SonPage sonPage) {
        this.currentActivePage = sonPage;
    }

    /**
     * 执行逻辑 覆盖原有的按键逻辑
     *
     */
    @Override
    public void onKeyDown() {
        if (isVisitInnerPage()) {
            getCurrentActivePage().onKeyDown();
        } else {
            super.onKeyDown();
        }
    }

    @Override
    public void onKeyUp() {
        if (isVisitInnerPage()) {
            getCurrentActivePage().onKeyUp();
        } else {
            super.onKeyUp();
        }
    }

    @Override
    public void onKeySet() {
        if (isVisitInnerPage()) {
            getCurrentActivePage().onKeySet();
        } else {
            super.onKeySet();
        }
    }


    @Override
    public void onKeyEnt() {
//        正在浏览下级页面，传递到下级
        if (isVisitInnerPage()) {
            getCurrentActivePage().onKeyEnt();
            return;
        }
//        确认浏览当前选中的条目的对应页面
        if (isInEditMode()) {
            enterSonPage();
        } else {
//          如果超过四条可以增加翻页功能 不在当前抽象类中实现
            super.onKeyEnt();
        }
    }


    @Override
    public void exitEditMode() {
        isInEditMode = false;
        editUnitList.get(currBlinkIndex).stopEdit(false);
        currBlinkIndex = 0;
//		先刷新再保存 保证页面显示的流畅
        refreshPage();
    }

    /**
     * 进入编辑模式
     */
    @Override
    public void enterEditMode() {
        isInEditMode = true;
        editUnitList.get(currBlinkIndex).startEdit();
    }

    @Override
    public boolean isVisitInnerPage() {
        return currentActivePage != null;
    }

    @Override
    public void close() {
        currBlinkIndex = 0;
        /**
         * setCurrentActivePage(null); 通过调用来确保
         */

    }
}
